package com.monkeyboy.utils;

import java.io.*;

/**
 * 描述: 处理文件的帮助类 作者: 高嘉银 时间:2018年3月27日 下午2:12:32
 */
public class FileHelper1 {

	/**
	 * 作用: 创建一个文件 作者:高嘉银 时间:2018年3月27日 下午4:10:06
	 * 
	 * @param path
	 * @param InputStream
	 * @return
	 * @throws Exception
	 */
	public static boolean createFile(InputStream stream, String path, String filename) throws Exception {
		checkPath(path);// 检查路径是否存在
		try (BufferedInputStream bin = new BufferedInputStream(stream);
				BufferedOutputStream bout = new BufferedOutputStream(
						new FileOutputStream(new File(path + "/" + filename)));) {
			// 开始读取源文件
			// 设置一个缓冲区
			byte[] buff = new byte[1024];
			int len = 0;
			while ((len = bin.read(buff)) != -1) {
				bout.write(buff, 0, len);
			}
			bout.flush();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

	/**
	 * 作用: 字符流创建文件 作者:gjy 时间:2018年3月27日 下午5:06:52
	 * 
	 * @param stream
	 * @param charset
	 * @param path
	 * @param filename
	 * @param isAppead 是否追加内容
	 * @return
	 * @throws Exception
	 */
	public static boolean createFileForChar(InputStream stream, String charset, String path, String filename,
			boolean isAppend) throws Exception {
		checkPath(path);
		try (BufferedReader br = new BufferedReader(new InputStreamReader(stream, charset)); // 得到一个输入缓冲字符流对象
				// 得到一个输出缓冲字符流对象
				BufferedWriter bw = new BufferedWriter(
						new OutputStreamWriter(new FileOutputStream(path + "/" + filename, isAppend), "utf-8"));) {

			String line = null;
			while ((line = br.readLine()) != null) {
				if (line == "" && line.length() == 0) {
					bw.newLine();
				} else {
					bw.write(line);
					bw.newLine();
				}
			}
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

	/**
	 * 作用: 判断文件夹位置是否存在，不存在就进行创建 作者:gjy 时间:2018年3月27日 下午2:40:47
	 * 
	 * @param path
	 * @return
	 */
	public static void checkPath(String path) throws Exception {
		if (path == null || path == "" || path.length() == 0) {
			throw new Exception("文件找不到！");
		}
		File f = new File(path);
		if (!f.exists()) {
			f.mkdirs();
		}
	}

	/**
	 * 作用： 获取一个输入流对象，主要是用于图片的输出 作者：高嘉银 时间：2018年4月5日
	 * 
	 * @param path
	 * @param fileName
	 * @return
	 * @throws FileNotFoundException
	 */
	public static InputStream getStream(String path, String fileName) throws Exception {
		File f = new File(path + "/" + fileName);
		if (!f.exists()) {
			// 如果没有找到文件就抛出一个文件没有找到的异常
			throw new FileNotFoundException();
		} else {
			return new FileInputStream(f);
		}
	}

	/**
	 * 作用： 删除临时文件夹中的某个文件 作者：高嘉银 时间：2018年4月5日
	 * 
	 * @param path
	 * @param fileName
	 */
	public static void deleteTempFile(String path, String fileName) {
		File f = new File(path + "/" + fileName);
		if (f.exists()) {
			f.delete();
		}
	}

	/**
	 * 作用： 删除upload里面的文件
	 * 
	 * @Author:Gavin
	 * @time:2018年7月16日
	 * @param path
	 * @param fileName
	 */
	public static void deleteUploadFile(String path, String fileName) {
		File f = new File(path + "/" + fileName);
		if (f.exists()) {
			f.delete();
		}
	}

	/**
	 * 作用： 把文件从临时文件夹转到永久的文件夹里面 作者：高嘉银 时间：2018年4月5日
	 * 
	 * @param form
	 * @param to
	 * @param fileName
	 * @return
	 * @throws IOException
	 */
	public static boolean transforTempFileToUploadFile(String from, String to, String fileName) {
		boolean ret = false;
		File fromF = new File(from + "/" + fileName);
		File toF = new File(to + "/" + fileName);
		if (!fromF.exists()) {
			return false;
		} else if (toF.exists()) {
			return true;
		} else {
			if (!new File(to).exists()) {
				new File(to).mkdirs();
			}
			try (InputStream in = new FileInputStream(fromF); OutputStream out = new FileOutputStream(toF);) {
				byte[] buff = new byte[1024];
				int len = 0;
				while ((len = in.read(buff)) != -1) {
					out.write(buff, 0, len);
				}
				if (new File(to + "/" + fileName).exists()) {
					ret = true;
				}
			} catch (FileNotFoundException e) {
				e.printStackTrace();
				ret = false;
			} catch (Exception e) {
				e.printStackTrace();
				ret = false;
			}
		}
		return ret;
	}

	/**
	 * 作用： 复制一个文件为另一个文件
	 * 
	 * @Author:Gavin
	 * @time:2018年8月28日
	 * @param originFile
	 * @param newFilePath
	 * @param newFileName
	 * @return
	 */
	public static boolean copyFile(String originFile, String newFilePath, String newFileName) {
		boolean flag = true;

		File f = new File(originFile);
		if (!f.exists()) {
			flag = false;
			return flag;
		}
		try (FileInputStream in = new FileInputStream(f);
				FileOutputStream out = new FileOutputStream(new File(newFilePath + "/" + newFileName));) {
			checkPath(newFilePath);
			if (in.available() > 0) {
				byte[] buff = new byte[1024];
				int len = 0;
				while ((len = in.read(buff)) != -1) {
					out.write(buff, 0, len);
				}
			} else {
				flag = false;
			}
		} catch (FileNotFoundException e) {
			flag = false;
		} catch (Exception e) {
			flag = false;
		}
		return flag;
	}

	public static void main(String[] args) throws Exception {
		String originFile = "D:/file/temp/3ea7a5b417fc4c66b5709706175608c7.jpg";
		String newFilePath = "D:/file/temp";
		System.out.println(copyFile(originFile, newFilePath, "123.jpg"));
	}
}
